package com.dqyt.common.utils;

import com.alibaba.fastjson.JSON;
import com.dqyt.app.bean.UserInfo;
import com.dqyt.app.config.AppConfig;
import com.dqyt.common.constant.Constant;
import com.dqyt.khjc.bean.ResultMsg;
import com.dqyt.khjc.bean.User;
import com.dqyt.khjc.config.WebConfig;
import com.dqyt.khjc.redis.MyJedisPool;
import redis.clients.jedis.Jedis;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;

/**
 * 用户信息工具类
 * web 和 APP的用户信息是分开保存的
 * 允许每个客户端只登陆一个账号
 */
public class UserInfoUtil {


    /**
     * 保存用户信息到redis---web
     *
     * @param user
     * @return
     */
    public static boolean saveUser_Web(User user) {
        Jedis jedis = null;
        try {
            jedis = MyJedisPool.getJedis();
//            User xUser =new User();
//            xUser.setUserId(user.getUserId());
//            xUser.setPhone(user.getPhone());
//            xUser.setAccount(user.getAccount());
//            xUser.setRole(user.getRole());
//            xUser.setPassword(user.getPassword());
//            xUser.setAvatar(user.getAvatar());
//            xUser.setDepartment(user.getDepartment());
//            xUser.setUserName(user.getUserName());
//            xUser.setStatue(user.getStatue());
//            xUser.setAuthority(new ArrayList<>());
//            xUser.setToken(user.getToken());
//            xUser.setSealId(user.getSealId());
//            xUser.setSealUrl(user.getSealUrl());
//            xUser.setRoleName(user.getRoleName());
//            xUser.setDhyNumber(user.getDhyNumber());
//            xUser.setAuthority(new ArrayList<>());
            // 更新用戶信息
            jedis.psetex(Constant.REDIS_PRE_WEB + String.valueOf(user.getUserId()),WebConfig.REDIS_LIVE_TIME,JSON.toJSONString(user));
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }


    /**
     * 保存用户信息到redis---app
     *
     * @param userInfo
     * @return
     */
    public static boolean saveUser_App(UserInfo userInfo) {
        Jedis jedis = null;
        try {
            jedis = MyJedisPool.getJedis();
            User user =  userInfo.getUser();

            User xUser =new User();
            xUser.setUserId(user.getUserId());
            xUser.setPhone(user.getPhone());
            xUser.setAccount(user.getAccount());
            xUser.setRole(user.getRole());
            xUser.setPassword(user.getPassword());
            xUser.setAvatar(user.getAvatar());
            xUser.setDepartment(user.getDepartment());
            xUser.setUserName(user.getUserName());
            xUser.setStatue(user.getStatue());
            xUser.setAuthority(new ArrayList<>());
            xUser.setToken(user.getToken());
            xUser.setSealId(user.getSealId());
            xUser.setSealUrl(user.getSealUrl());
            xUser.setRoleName(user.getRoleName());
            xUser.setDhyNumber(user.getDhyNumber());
            xUser.setAuthority(new ArrayList<>());
            userInfo.setUser(xUser);




            // 更新用戶信息
            jedis.psetex(Constant.REDIS_PRE_APP + String.valueOf(userInfo.getUser().getUserId()),
                    AppConfig.REDIS_LIVE_TIME,
                    JSON.toJSONString(userInfo));
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }




    /**
     * 取得用户信息 -- WEB
     */
    public static User getUser_Web(HttpServletRequest request) {
        Jedis jedis = null;
        try {
            String userId = request.getHeader("userId"); //从请求中取出token
            jedis = MyJedisPool.getJedis();
            // 根据用户id取得用户信息
            String userJson = jedis.get(Constant.REDIS_PRE_WEB + userId);
            if (null != userJson) {
                User user = JSON.parseObject(userJson, User.class);
                return user;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    /**
     * 取得用户信息 -- App
     */
    public static UserInfo getUser_App(long userId) {
        Jedis jedis = null;
        try {
            jedis = MyJedisPool.getJedis();
            // 根据用户id取得用户信息
            String userJson = jedis.get(Constant.REDIS_PRE_APP + userId);
            if (null != userJson) {
                UserInfo user = JSON.parseObject(userJson, UserInfo.class);
                return user;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    /**
     * 验证用户Token -- Web
     *
     * @return
     */
    public static ResultMsg isAuthori_Web(HttpServletRequest request) {
        Jedis jedis = null;
        try {
            String userId = request.getHeader("userId"); //从请求中取出token
            String token = request.getHeader("token"); //从请求中取出token

            if (userId == null || token == null || token.length() != 32) {
                return new ResultMsg(ResultMsg.LOGIN_EXPIRED, "非法请求", null);
            }
            jedis = MyJedisPool.getJedis();
            // 根据用户手机号取得用户信息
            String userJson = jedis.get(Constant.REDIS_PRE_WEB + userId);
            // 如果信息不为空
            if (null != userJson) {
                // 转化为用户对象
                User user = JSON.parseObject(userJson, User.class);
                // 如果token相等
                if (token.equals(user.getToken())) {
                    // 更新用戶信息
                    jedis.psetex(String.valueOf(user.getUserId()), WebConfig.REDIS_LIVE_TIME, JSON.toJSONString(user));
                    return null;
                } else {
                    // 如果token不正确
                    return new ResultMsg(ResultMsg.LOGIN_EXPIRED, "登录信息过期！", null);
                }
            }
            // 如果信息为空
            else {
                return new ResultMsg(ResultMsg.LOGIN_EXPIRED, "登录信息过期！", null);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultMsg(ResultMsg.ERROR, "数据异常，请联系管理员！", null);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    /**
     * 验证用户Token -- App
     *
     * @return
     */
    public static ResultMsg isAuthori_App(long userId, String token) {
        Jedis jedis = null;
        try {
            if (userId == 0 || token == null || token.length() != 32) {
                return new ResultMsg(ResultMsg.LOGIN_EXPIRED, "非法请求", null);
            }
            jedis = MyJedisPool.getJedis();
            // 根据用户手机号取得用户信息
            String userJson = jedis.get(Constant.REDIS_PRE_APP + userId);
            // 如果信息不为空
            if (null != userJson) {
                // 转化为用户对象
                UserInfo userInfo = JSON.parseObject(userJson, UserInfo.class);
                // 如果token相等
                if (token.equals(userInfo.getUser().getToken())) {
                    return null;
                } else {
                    // 如果token不正确
                    return new ResultMsg(ResultMsg.LOGIN_EXPIRED, "登录信息过期！", null);
                }
            }
            // 如果信息为空
            else {
                return new ResultMsg(ResultMsg.LOGIN_EXPIRED, "登录信息过期！", null);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultMsg(ResultMsg.ERROR, "数据异常，请联系管理员！", null);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }


    public static User getUserInfologin(long userId, String token){
        Jedis jedis = null;
        try {
            jedis = MyJedisPool.getJedis();
            // 根据用户手机号取得用户信息
            String userJson = jedis.get(Constant.REDIS_PRE_APP + userId);
            // 如果信息不为空
            if (null != userJson) {
                // 转化为用户对象
                UserInfo userInfo = JSON.parseObject(userJson, UserInfo.class);
                // 如果token相等
                if (token.equals(userInfo.getUser().getToken())) {
                    return userInfo.getUser();
                } else {
                    // 如果token不正确
                    return null;
                }
            }
            // 如果信息为空
            else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}